﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace MylambdaLinqDemo
{
    /// <summary>
    /// 静态类---
    /// </summary>
    public static class MethodExtension
    {

        /// <summary>
        /// Linq嘛；
        /// Linq 是什么？  从技术上来说，扩展方法；
        /// 把共同的业务逻辑进行封装，把可变的业务逻辑通过委托来传递。-----再通过扩展方法实现---Linq 
        /// 对于任何的操作， 都有相同的需求；
        /// 当前的Linq--linq to object
        /// Linq To Redis:  把相同的业务逻辑封装，把可变的业务逻辑通过委托传递；
        /// Linq To Xml：   把相同的业务逻辑封装，把可变的业务逻辑通过委托传递；
        /// Linq To Json:   把相同的业务逻辑封装，把可变的业务逻辑通过委托传递；
        /// Linq To Sql：   把相同的业务逻辑封装，把可变的业务逻辑通过表达式目录树来传递；
        /// 
        /// 既然如此： 万物皆可Linq嘛？ Linq To Everything ---是一个扩展方法；
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="studentList"></param>
        /// <param name="func"></param>
        /// <returns></returns>
        public static List<T> RichardWhere<T>(this List<T> studentList, Func<T, bool> func)
        {
            List<T> students1 = new List<T>(); //经过计算，这个集合和sList结果一致的；
            foreach (var student in studentList)
            {
                //if (student.Name.Length < 4)
                if (func.Invoke(student))
                {
                    students1.Add(student);
                }
            }
            return students1;
        }



        ///// <summary>
        ///// 扩展方法？？
        ///// 参数的类型 List<Student> 如果想要传递List<Teacher>  或者还有更多其他的类型呢？
        ///// 希望一个方法满足不同的类型的需求；  泛型方法？
        ///// </summary>
        ///// <param name="studentList"></param>
        ///// <param name="func"></param>
        ///// <returns></returns>
        //public static List<Student> RichardWhere(this List<Student> studentList, Func<Student, bool> func)
        //{
        //    List<Student> students1 = new List<Student>(); //经过计算，这个集合和sList结果一致的；
        //    foreach (var student in studentList)
        //    {
        //        //if (student.Name.Length < 4)
        //        if (func.Invoke(student))
        //        {
        //            students1.Add(student);
        //        }
        //    }
        //    return students1;
        //}






        /// <summary>
        /// 新增一个类，来一个方法来完成新需求
        /// 扩展方法
        /// </summary>
        public static void StudyFramework(this Student student)
        {
            Console.WriteLine($"{student.Id}--{student.Name}和Eleven老师一起学习如何成为一个优秀的架构师");
        }


        //需求：字符串截取。如果超过多长，就变成， 前面几个字符+ ‘。。。’


        /// <summary>
        /// 针对于：对于超过多少个字符的字符串  做截取处理
        /// </summary>
        /// <param name="str"></param>
        /// <param name="lenth"></param>
        /// <returns></returns>
        public static string Stringlenth(this string str, int lenth = 10)
        {
            if (string.IsNullOrWhiteSpace(str))
            {
                return "";
            }
            if (str.Length > lenth)
            {
                return str.Substring(0, lenth) + "....";
            }
            else
            {
                return str;
            }
        }

        public static void ObjectExt(this object obj)
        {

        }


        public static void GenericExt<T>(this T obj)
        {

        }

    }
}
